import pandas as pd
import numpy as np
import dalex as dx
import pickle
import warnings
warnings.filterwarnings("ignore")
Załadowanie pickla z XGBoostem.
xgb = pickle.load(open("xgb.pickle", "rb"))
Załadowanie zpreprocesowanej ramki danych.
df = pd.read_csv('housing_preprocessed.csv').rename(columns={"<1H OCEAN" : "1H OCEAN"})
X = df.drop(["median_house_value"], axis=1)
y = df[["median_house_value"]]
Utworzenie epxplainera.
explainer = dx.Explainer(xgb, X, y, verbose=False)
pdp = explainer.model_profile(verbose=False)
ale = explainer.model_profile(type='accumulated', verbose=False)
Rysowanie wykresów.
pdp.result['_label_'] = 'XGB_PDP'
ale.result['_label_'] = 'XGB_ALE'
ale.plot(pdp, variables=['median_income', 'households', 'longitude', 'latitude'])
Jak widać, wykresy ALE i PDP w zasadzie się od siebie nie różnią. Jedyną różnicą jest względne przesunięcie wobec siebie o pewną stałą, która jest inna dla każdej ze zmiennych. Jako, że porównanie tych dwóch metod nie jest zbyt widowiskowe, porównajmy wykresy PDP dla dwóch różnych modeli. Ciekawe jest to, że dla niektórych zmiennych model ALE pokazuje wyższe wartości a dla niektórych PDP.
mlp = pickle.load(open("mlp.pickle", "rb"))
explainer_mlp = dx.Explainer(mlp, X, y, verbose=False)
pdp_mlp = explainer_mlp.model_profile(verbose=False)
ale_mlp = explainer_mlp.model_profile(type='accumulated', verbose=False)
pdp_mlp.result['_label_'] = 'MLP_PDP'
ale_mlp.result['_label_'] = 'MLP_ALE'
ale_mlp.plot(pdp_mlp, variables=['median_income', 'households', 'longitude', 'latitude'])
W modelu MLP wszystkie zależności są liniowe. Do tego, zmienne households, longitude i latitude w zasadzie nie mają wpływu na finalną predykcję modelu. Zakres wartości dla zmiennej 'median_income' to tylko od ok. 25k do 60k. Wykresy ALE i PDP ponownie różnią się tylko o stałą, która jest inna dla każdej ze zmiennych.
ale_mlp.plot(ale)
Porównanie wykresów PDP modeli XGB i MLP pokazuje, że XGB wykrywa dużo więcej zależności w porównaniu do MLP. Jest on w stanie połączyć lokalizację mieszkania z jego ceną, podczas gdy modelowi MLP zależność ta całkowicie umyka. Ciekawe jest równiez, że zmienna 'median_income' w modelu XGB przyjmuje dużo szerszy i dużo większy zakres wartości (od 200k do ok. 425k) w porównaniu do MLP (od 25k do 60k). Model MLP wydaje się zdecydowanie zaniżać wartość mieszkań, w każdej ze zmiennej podaje on dużo bardziej zachowawacze wartości niż XGBoosta.